<!DOCTYPE HTML>
<!--generated with sswg-->
<html lang="en">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
    <title> ursina engine</title>
    <link rel="stylesheet" href="sswg.css">
    <link rel="stylesheet" href="style.css">
    <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<div style="max-width:1200px; margin:auto;">
<div style="text-align:left;">
<br>
<a href="index.html"><img src="ursina_logo_wireframe.webp" style="width:50px; height:auto; margin-right:10px;"/></a> <a href=" installation.html" class="button">Download</a> <a href=" documentation.html" class="button">Documentation</a> <a href=" api_reference_v8_2_0/index.html" class="button">API Reference</a> <a href=" samples.html" class="button">Samples</a> <a href=" asset_store.html" class="button">Asset Store</a> <a href=" donate.html" class="button">Donate</a><meta property="og:title" content="Ursina Engine"/> <meta property="og:type" content="website"/> <meta property="og:url" content="https://www.ursinaengine.org"/> <meta property="og:description" content="Ursina, an open source, python powered game engine"/> <meta property="og:image" content="https://www.ursinaengine.org/made_with_ursina.jpg"/><br>
</div>
<div style="text-align:center;">
<div id="header">ursina engine</div><br>
A Python powered, open source game engine<br>
<br>
<a href="https://github.com/pokepetter/ursina"><img src="icons/github_icon.png"></img></a>&nbsp;&nbsp;<a href="https://discord.gg/ydXfhyb"><img src="icons/discord_icon.png"></img></a>&nbsp;&nbsp;<a href="https://twitter.com/ursinaengine"><img src="icons/twitter_icon.png"></img></a>&nbsp;&nbsp;<a href="https://github.com/sponsors/pokepetter"><img src="icons/github_sponsors_icon.png"></img></a><br>
<br>
<br>
<a href="https://youtu.be/j71j88oCTNo" target="_blank" rel="noopener noreferrer"><img src="ursina_trailer_preview.webp" alt="link to ursina trailer" style="width:900px;height:491px;object-fit:contain;"></a><br>
<br>
</div>
<div style="text-align:left;">
<h2 id="Powered by Python">
Powered by Python
</h2>Python is the world's most popular programming language for a reason. The ease of use of Python combined with ursina's design, makes it easy to write concise code and avoid lots of boilerplate code.<br>
<code_block id="code_block_0"><button class="copy_code_button" onclick="copy_to_clipboard(code_block_0)">copy</button><purple>from</purple> ursina <purple>import</purple> *

app = Ursina()

cube = <olive>Entity</olive>(<olive>model</olive>=<green>'cube'</green>, <olive>color</olive>=hsv(<yellow>3</yellow><yellow>0</yellow><yellow>0</yellow>,<yellow>1</yellow>,<yellow>1</yellow>), <olive>scale</olive>=<yellow>2</yellow>, <olive>collider</olive>=<green>'box'</green>)

<purple>def</purple> spin():
&nbsp;&nbsp;&nbsp;&nbsp;cube.animate(<green>'rotation_y'</green>, cube.rotation_y+<yellow>3</yellow><yellow>6</yellow><yellow>0</yellow>, duration=<yellow>2</yellow>, <olive>curve</olive>=curve.in_out_expo)

cube.on_click = spin
EditorCamera()&nbsp;&nbsp;<gray># add camera controls <purple>for</purple> orbiting and moving the camera</gray>

app.run()

</code_block>
<br>
<br>
<h2 id="Make Any Type of Game">
Make Any Type of Game
</h2>2D games, 3D games, applications, visualizations, you can make anything you want with ursina.<br>
<br>
<img src="made_with_ursina.jpg"></img> <br>
<br>
<br>
<h2 id="Iterate Faster">
Iterate Faster
</h2>• Reload code/textures/models while in-game<br>
• Automatic import of .psd and .blend files<br>
• Compile times:<br>
<br>
Iteration speed benchmark. Time from code/scene change to play. Game: pong clone. Lower is better.<br>
<br>
<code_block id="code_block_1"><button class="copy_code_button" onclick="copy_to_clipboard(code_block_1)">copy</button>engine:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; times as slow:

ursina&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<yellow>0</yellow><yellow>0</yellow>.<yellow>0</yellow><yellow>1</yellow>s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<yellow>1</yellow>x
Godot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <yellow>0</yellow><yellow>1</yellow>.<yellow>1</yellow><yellow>8</yellow>s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<yellow>1</yellow><yellow>1</yellow><yellow>8</yellow>x
Unity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <yellow>1</yellow><yellow>1</yellow>.<yellow>4</yellow><yellow>5</yellow>s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<yellow>1</yellow><yellow>1</yellow><yellow>4</yellow><yellow>5</yellow>x
</code_block>
<br>
<br>
<h2 id="Modern UI">
Modern UI
</h2>• Sleek modern design.<br>
• Full control. Change the looks of anything, down to the smallest details.<br>
• Built with Entities like everything else, so you don't have to relearn anything.<br>
<br>
<img src="ursina_ui_banner.jpg"></img> <br>
<br>
<br>
<br>
<h2 id="Batteries Included">
Batteries Included
</h2>• Easy to use mesh class for making procedural geometry<br>
• Built-in animation and tweening<br>
• Pre-made prefabs such as FirstPersonController, 2d platformer controller, editor camera<br>
• Lots of included procedural 3D primitives<br>
• Many shaders to choose from, or write your own with GLSL<br>
<br>
<img src="ursina_batteries_included_banner.jpg"></img> <br>
<br>
<br>
<h2 id="Free">
Free
</h2>Licensed under the permissive MIT license,<br>
you can use Ursina for whatever you want.<br>
<br>
• No revenue cut or subscription fee.<br>
• Freely modify source code to fix bugs or add features<br>
<br>
<br>
<h2 id="Dependencies">
Dependencies
</h2>• python 3.12+<br>
• panda3d<br>
• pillow, for texture manipulation<br>
• pyperclip, for cut and paste support<br>
<br>
Optional:<br>
• Blender, for converting .blend files<br>
• psutil, for measuring memory usage<br>
• imageio, for recording and converting to gifs<br>
• psd-tools3, for converting .psd files<br>
• thumbhash-python, for generating and loading low resolution placeholder textures<br>
<br>
<br>
<h2 id="Platforms">
Platforms
</h2>• Windows<br>
• Linux<br>
• Mac (not officially supported, but will most likely work)<br>
<br>
<br>
<br>
<a href=" installation.html" class="button">Download</a><br>
<script>
function copy_to_clipboard(containerid) {
    var range = document.createRange()
    range.selectNode(containerid)
    window.getSelection().removeAllRanges()
    window.getSelection().addRange(range)
    document.execCommand("copy")
    window.getSelection().removeAllRanges()
}
</script>
<br>
<br>
</body>
</html>